package Sort;

public class Sort {

    public void insertSort(int[]array){
        for (int i = 0; i <array.length ; i++) {
            int j=i-1;
            int tmp=array[i];
            while(j>=0){
                if(array[j]>tmp){
                    array[j+1]=array[j];
                }else {
                    array[j+1]=tmp;
                    break;
                }
                j--;
            }
            array[j+1]=tmp;
        }
    }

    public void shellSort(int[]array){
        int gap=array.length;
        while(gap>1){
            gap/=2;
            shell(array,gap);
        }
    }

    private void shell(int[]array,int gap){
        int i=gap;
        for (; i < array.length; i++) {
            int tmp=array[i];
            int j = i-gap;
            for (; j >=0; j-=gap) {
                if(array[j]>tmp){
                    array[j+gap]=array[j];
                }else {
                    break;
                }
            }
            array[j+gap]=tmp;
        }

    }

    private void swap(int[]elem,int left,int right){
        int tmp=elem[left];
        elem[left]=elem[right];
        elem[right]=tmp;
    }

    public void bobSort(int[]array){
        for (int i = 0; i <array.length-1 ; i++) {
            boolean flag=true;
            for (int j = 0; j <array.length-1-i ; j++) {
                if(array[j+1]<array[j]){
                    swap(array,j,j+1);
                flag=false;
                }
            }
            if(flag){
                break;
            }
        }
    }

public void selectSort(int[]array){
    for (int i = 0; i <array.length-1 ; i++) {
        int min=i;
        for (int j = i+1; j <array.length ; j++) {
            if(array[j]<array[min]){
                min=j;
            }
        }
        swap(array,min,i);
    }
}




}
